// Diccionario.cpp : implementation file
//

#include "stdafx.h"
#include "isismarc.h"
#include "Diccionario.h"
#include "BusquedaView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDiccionario dialog


CDiccionario::CDiccionario(CWnd* pParent /*=NULL*/)
	: CDialog(CDiccionario::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDiccionario)
	//}}AFX_DATA_INIT

	this->modoSeleccion = true;

	// Este es un puntero que luego es casteado
	// a la view de busqueda

	this->vent = (CView*) pParent;
}


void CDiccionario::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDiccionario)
	DDX_Control(pDX, IDC_EDIT1, m_Termino);
	DDX_Control(pDX, IDC_LIST1, m_Lista);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDiccionario, CDialog)
	//{{AFX_MSG_MAP(CDiccionario)
	ON_WM_CREATE()
	ON_WM_SHOWWINDOW()
	ON_WM_CANCELMODE()
	ON_EN_CHANGE(IDC_EDIT1, OnCambioTermino)
	ON_LBN_DBLCLK(IDC_LIST1, OnPasarTerminoaBusqueda)
	ON_LBN_SELCHANGE(IDC_LIST1, OnCambiaSeleccion)
	ON_BN_CLICKED(IDC_BOTONTRAS, OnAvanzaPagina)
	ON_BN_CLICKED(IDC_BOTONANT, OnRetrocedePagina)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDiccionario message handlers


void CDiccionario::PostNcDestroy() 
{
	// TODO: Add your specialized code here and/or call the base class
	
	CBusquedaView* miventana;
	
	miventana = (CBusquedaView *) this->vent;
	miventana -> SetDiccionarioCerrado();
	
	CDialog::PostNcDestroy();
	delete this;
}

void CDiccionario::Cerrar()
{
	this->PostNcDestroy();
}

void CDiccionario::AsignarHandler(CMyIsis objIsis)
{
	cmi = objIsis;	
}


int CDiccionario::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{

	
	if (CDialog::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	// TODO: Add your specialized creation code here
	lpCreateStruct->y=0;
	lpCreateStruct->x=800;

	
	return 0;
}



void CDiccionario::IniciarDiccionario(CString Termino)
{
	CString linea;

	m_Lista.ResetContent();
	Termino.TrimRight();
	long res=cmi.IsisIniciarInvertido(Termino);
	int cantidad =0;
	while (res>0 && cantidad++<99)
	{
		linea.Format("%-7d",res);
		m_Lista.AddString(linea+"  "+cmi.IsisTerminoInvertido());
		res = cmi.IsisProximoTermInvertido();
	}
	if (res>0)
	{
	 linea.Format("%-7d",res);
	 m_Lista.AddString(linea+"  "+cmi.IsisTerminoInvertido());
	}

	

}

void CDiccionario::OnShowWindow(BOOL bShow, UINT nStatus) 
{
	CDialog::OnShowWindow(bShow, nStatus);
	
	// TODO: Add your message handler code here
	
	CString cadena;
	m_Termino.GetWindowText(cadena);
	IniciarDiccionario (cadena);
}

void CDiccionario::OnCancelMode() 
{
	CDialog::OnCancelMode();
	
	// TODO: Add your message handler code here
	
}

void CDiccionario::OnCambioTermino() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CDialog::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	
	// TODO: Add your control notification handler code here
	if (modoSeleccion)
	{
		CString term;
		m_Termino.GetWindowText(term);
		this->IniciarDiccionario (term);	
	}
	else
	{
		// modoSeleccion controla
		// el comportamiento de si debe iniciar o no diccionario
		// de acuerdo si el usuario selecciono de lista o edito
		// directamente
		modoSeleccion = true;
	}
}

void CDiccionario::OnPasarTerminoaBusqueda() 
{
	// TODO: Add your control notification handler code here
	CBusquedaView* miventana;

	CString seleccionado;
	m_Lista.GetText(m_Lista.GetCurSel(),seleccionado);
	seleccionado = seleccionado.Mid(9);
	seleccionado.TrimRight();

	// Agregado de Paula para que cuando tiene 
	// parentesis el termino baje con comillas

	if (seleccionado.Find("(",0)>0)
		seleccionado = "\""+seleccionado+"\"";

	miventana = (CBusquedaView *) this->vent;
	miventana ->AgregaTermDict (seleccionado);
	
}

void CDiccionario::OnCambiaSeleccion() 
{
	// TODO: Add your control notification handler code here
	CString seleccionado;
	m_Lista.GetText(m_Lista.GetCurSel(),seleccionado);
	modoSeleccion = false;
	m_Termino.SetWindowText(seleccionado.Mid(9));
}

void CDiccionario::OnAvanzaPagina() 
{
	// TODO: Add your control notification handler code here
	if (m_Lista.GetCount()>0)
	{
		int res = cmi.IsisProximoTermInvertido();
		if (res>0)
		{
			m_Lista.ResetContent();
			int cantidad =0;
			CString linea;
			while (res>0 && cantidad++<99)
			{
				linea.Format("%-7d",res);
				m_Lista.AddString(linea+"  "+cmi.IsisTerminoInvertido());
				res = cmi.IsisProximoTermInvertido();

			}
			if (res>0)
			{
			 linea.Format("%-7d",res);
			 m_Lista.AddString(linea+"  "+cmi.IsisTerminoInvertido());
			}
				
		}
	}

	

}

void CDiccionario::OnRetrocedePagina() 
{
	// TODO: Add your control notification handler code here

	if (m_Lista.GetCount()>0)
	{
		
			int cantidad =0;
			int res;

			CString termino;
			CString linea;

			m_Lista.GetText(0,termino);
			termino.TrimRight();

			cmi.IsisIniciarInvertido(termino.Mid(9));
			res = cmi.IsisAnteriorTermInvertido();
			
			while (res>0 && cantidad++<100)
			{
				res = cmi.IsisAnteriorTermInvertido();

			}

			if (res>0)
			{
			 this->OnAvanzaPagina();			
			}
			else
			{
			  this->IniciarDiccionario("");
			}

			
			
	}
	
}

void CDiccionario::Titulo(CString leyenda)
{
	SetWindowText(leyenda);
}
